iT邦幫忙

2023 iThome 鐵人賽

DAY 18
0

前一天講到了requests的基礎,今天來進一步使用requests吧

Beautifulsoup是很常跟requests拿來搭配使用的套件

首先先從安裝套件做起

pip install beautifulsoup4

前一天取得網站資訊之後,是不是覺得輸出很醜,這時可以透過使用beautifulsoup來美化輸出

作法如下

import requests
from bs4 import BeautifulSoup

url = "https://ani.gamer.com.tw/"

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36'
}

response = requests.get(url, headers=headers)

result = BeautifulSoup(response.text, "html.parser")
print(result.prettify())

https://ithelp.ithome.com.tw/upload/images/20230928/20146555gjqnzeWt9J.png

可以對比之前的輸出結果,這樣子就美觀很多了,增加網頁的可讀性

底下介紹幾個常用的函數


find()

回傳第一個符合條件的標籤

範例如下

result = BeautifulSoup(response, "html.parser")
element = result.find("p")

print(element)

#output
<p>最近搜尋</p>

find_all()

回傳所有符合條件的標籤

範例如下

element = result.find_all("p")

for tags in element:
    print(tags)
#output
<p>最近搜尋</p>
<p>熱門搜尋</p>
<p>本季新番</p>
<p>週期表</p>
<p class="newanime-filter-text">依更新日排列</p>
<p>第4集</p>
<p class="">黑暗集會</p>
<p class="anime-name_for-marquee">黑暗集會</p>
<p>23.6萬</p>
<p>第4集</p>
<p class="">英雄教室</p>
<p class="anime-name_for-marquee">英雄教室</p>
<p>9.2萬</p>
<p>第4集</p>
<p class="">無職轉生~到了異世界就拿出真本事 第二季</p>
<p class="anime-name_for-marquee">無職轉生~到了異世界就拿出真本事 第二季</p>
<p>82.1萬</p>
.
.
.

回傳的標籤這麼多,我們也可以篩選我們想要的特定的class或者網頁自訂屬性

範例如下

搜尋特定class

element = result.find_all("p", class_="extend-content")

for tags in element:
    print(tags)

#output
<p class="extend-content">
東立出版社於今(30)日漫畫博覽會舞台活動中,邀請到漫畫《孤獨搖滾!》作者濱路晶(はまじあき)舉行簽名會。這次的漫博場是緊接在安利美特場之後舉行,而率先於安利美特舉行簽名會的濱路晶,也在活動中徹底感受到了台灣人的熱情之處。 ※ 因
</p>
<p class="extend-content">
木棉花於今(30)日在漫畫博覽會中,邀請到為《進擊的巨人》艾連‧葉卡配音的聲優梶裕貴舉辦了繼昨日之後的第二場的聲優見面會,他也在今日的活動開始之前接受了媒體的訪 問,分享了更多這次來台的心情以及對於參與演出《進擊的巨人》至今的感想。(因應版權
</p>
.
.
.

搜尋網頁自訂標籤

element = result.find_all("div", attrs={"newanime-date-area new-count-3 fadeIn"})

for tags in element:
    print(tags)
    
#output
<div class="newanime-date-area new-count-3 fadeIn" data-animesn="113305" data-date-code="3">
<div class="anime-content-block">
<div class="date-block">
<div class="pic-continue">
<img alt="icon-continue" src="https://i2.bahamut.com.tw/anime/pic-continue.svg"/>
</div>
<div class="date-block-border"></div>
</div>
.
.
.

參考資料

https://blog.gtwang.org/programming/python-beautiful-soup-module-scrape-web-pages-tutorial/
https://scrapeops.io/python-web-scraping-playbook/python-beautifulsoup-findall/


上一篇
[Day 17] 初見requests
下一篇
[Day 19] 初見selenium(上)
系列文
用30天打好Python、LineBot的基礎&基本應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言